package br.ufpe.cin.ip.biblioteca.negocio;

import br.ufpe.cin.ip.biblioteca.entidades.Publicacao;
import br.ufpe.cin.ip.biblioteca.excecoes.PublicacaoJaCadastradaException;
import br.ufpe.cin.ip.biblioteca.excecoes.PublicacaoNaoEncontradaException;
import br.ufpe.cin.ip.biblioteca.excecoes.RepositorioException;
import br.ufpe.cin.ip.biblioteca.iterator.IteratorPublicacao;
import br.ufpe.cin.ip.biblioteca.repositorios.RepositorioPublicacao;

public class CadastroPublicacaoImpl implements CadastroPublicacao {
	private RepositorioPublicacao repositorio;
	
	public CadastroPublicacaoImpl(RepositorioPublicacao repositorioPublicacao) {
		this.repositorio = repositorioPublicacao;
	}
	
	@Override
	public void adicionar(Publicacao publicacao) throws RepositorioException, PublicacaoJaCadastradaException {
		if(this.existe(publicacao)) {
			throw new PublicacaoJaCadastradaException();
		} else {
			this.repositorio.adicionar(publicacao);
		}
	}
	
	@Override
	public void remover(Publicacao publicacao) throws RepositorioException, PublicacaoNaoEncontradaException {
		if(this.existe(publicacao)) {
			this.repositorio.remover(publicacao);
		} else {
			throw new PublicacaoNaoEncontradaException();
		}
	}
	
	@Override
	public void atualizar(Publicacao publicacao) throws RepositorioException, PublicacaoNaoEncontradaException {
		if(this.existe(publicacao)) {
			this.repositorio.atualizar(publicacao);
		} else {
			throw new PublicacaoNaoEncontradaException();
		}
	}
	
	@Override
	public Publicacao buscar(Publicacao publicacao) throws RepositorioException, PublicacaoNaoEncontradaException {
		if(this.existe(publicacao)) {
			return this.repositorio.buscar(publicacao);
		} else {
			throw new PublicacaoNaoEncontradaException();
		}
	}
	
	@Override
	public IteratorPublicacao getIterator() {
		return this.repositorio.getIterator();
	}
	
	@Override
	public boolean existe(Publicacao publicacao) throws RepositorioException {
		return this.repositorio.existe(publicacao);
	}
}
